#include<iostream>
#include"auto_ptr.h"
#include"unique_ptr.h"
#include"shared_ptr.h"

struct Date
{
	int _year;
	int _month;
	int _day;

	Date(int year = 1, int month = 1, int day = 1)
		:_year(year)
		, _month(month)
		, _day(day)
	{}

	~Date()
	{
		cout << "~Date()" << endl;
	}
};

//int main()
//{
//	jyz::auto_ptr<int> ap1(new int(1));
//	jyz::auto_ptr<int> ap2(ap1);
//
//	//cout << *ap1 << endl;
//	cout << *ap2 << endl;
//
//	return 0;
//}

//int main()
//{
//	jyz::unique_ptr<int> up1(new int(1));
//	//jyz::unique_ptr<int> up2(up1);
//
//	cout << *up1 << endl;
//
//	return 0;
//}

//int main()
//{
//	//jyz::shared_ptr<int> sp1(new int(1));
//	//jyz::shared_ptr<int> sp2(sp1);
//
//	//cout << *sp1 << endl;
//	//cout << *sp2 << endl;
//	//cout << sp1.use_count() << endl;
//	//cout << sp2.use_count() << endl;
//	//jyz::shared_ptr<int> sp3=sp1;
//	//cout << sp3.use_count() << endl;
//
//	jyz::shared_ptr<int> sp4(new int(4), [](int* ptr) {delete ptr; });
//	jyz::shared_ptr<int> sp5(new int(5));
//
//	return 0;
//}


int main()
{
	jyz::shared_ptr<Date> sp1(new Date{ 2024,9,20 });
	jyz::shared_ptr<Date> sp2(sp1);
	jyz::shared_ptr<Date> sp3 = sp2;
    cout << sp3.use_count() << endl;

	return 0;
}